#ifndef RAYTRACER_HPP
#define RAYTRACER_HPP
#include <cmath>
#include "grid.hpp"
#include "ray.hpp"
#include "scene.hpp"
#include "vector.hpp"
#include "color.hpp"
#include "illumination.hpp"
#include "output.hpp"
#include "tga.hpp"

using namespace std;

class Raytracer {
public:
	Raytracer(Scene*,Grid*,const Vector&,const Vector&,const unsigned short,const unsigned short,const unsigned short);
	~Raytracer(void);

	Output* render(void) const;

	void set_scene(Scene*);
	void set_grid(Grid*);
	void set_position(const Vector&);
	void set_up(const Vector&);
	void set_height(int);
	void set_width(int);	

	Scene* get_scene(void) const;
	Grid* get_grid(void) const;
	Vector get_position(void) const;
	Vector getUp(void) const;
	int get_height(void) const;
	int get_width(void) const;
	
	int trace(const Ray&,Vector&) const;

private:
	Scene* scene;
	Grid* grid;
	Illumination illumination;
	Vector position;
	Vector up;
	unsigned short height,width;
	unsigned short depth;
	
	
};


#endif
